package com.example.controller.TextTool;

import com.example.entity.RestBean;
import com.example.entity.dto.TextTool.TextTool;
import com.example.entity.vo.request.text.CountRequestVO;
import com.example.entity.vo.request.text.LetterChangeRequestVO;
import com.example.entity.vo.response.text.CountResponseVO;
import com.example.entity.vo.response.text.LetterChangeResponseVO;
import com.example.service.TextToolService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 文本工具控制器
 *
 * @auth shanyue
 * @date 2025年07月09日14:04
 */
@RestController
@RequestMapping("/api/textTool")
public class TextController {

    @Resource
    private TextToolService textToolService;

    /**
     * 获取所有文本工具列表
     *
     * @return 包含所有的TextTool的RestBean对象
     */
    @GetMapping("/getTextToolList")
    public RestBean<List<TextTool>> getTextToolList() {
        List<TextTool> list = textToolService.list();
        return RestBean.success(list);
    }

    /**
     * 根据路径获取指定文本工具的详细信息
     *
     * @param path 工具路径标识
     * @return 对应的TextTool信息，不存在返回404
     */
    @GetMapping("/getInfo")
    public RestBean<TextTool> getTextToolInfo(@RequestParam("path") String path) {
        TextTool textTool = textToolService.getInfoByPath(path);
        if (textTool != null) {
            return RestBean.success(textTool);
        } else {
            return RestBean.failure(404, "找不到对应工具信息");
        }
    }

    /**
     * 统计文本信息
     *
     * @param requestVO 请求体，包含用户输入文本
     * @return 封装在RestBean的统计结果CountResponseVO对象
     */
    @PostMapping("/getCountResult")
    public RestBean<CountResponseVO> getCountResult(@RequestBody CountRequestVO requestVO) {
        CountResponseVO result = textToolService.getCountResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 将输入的文本进行大小写转换
     *
     * @param requestVO 请求体，封装需要转换的文本内容以及类型
     * @return 封装在RestBean的转换后的结果
     */
    @PostMapping("/convertText")
    public RestBean<LetterChangeResponseVO> convertText(@RequestBody LetterChangeRequestVO requestVO) {
        LetterChangeResponseVO result = textToolService.convertText(requestVO);
        return RestBean.success(result);
    }

}
